// 此文件封装文件操作相关功能
const fs = require('fs');
// 导入multer插件进行formdata数据处理
const multer = require('multer');
const path = require('path');
const uuid = require('uuid');
const host = require('os').networkInterfaces()[Object.keys(require('os').networkInterfaces())[0]][1].address;
const port = process.env.port || 8080;

/**
 * 创建目录，如果上级目录不存在，也会自动创建
 * @param {string} path 
 */
function superMkdir(path) {
    // 先使用 / 进行路径的拆分
    path = path.split('/');
    let s = ''; // 拼接路径
    // 循环目录
    for (let index = 0; index < path.length; index++) {
        const p = path[index];
        if (p === '') continue;
        // 拼接路径
        s += p + '/';
        // 判断创建
        if (fs.existsSync(s) === false) {
            fs.mkdirSync(s);
        }
    }
}

// 创建文件处理中间件
function createUpload(p) {
    // 创建对应的目录
    superMkdir(p);
    // 指定存储位置和名字
    var storage = multer.diskStorage({
        // 文件存储路径
        destination: function (req, file, cb) {
            // 用cb来指定保存的路径
            // 参数1：错误信息
            // 参数2：保存目录
            cb(null, p);
        },
        // 文件存储名称
        filename: function (req, file, cb) {
            cb(null, uuid.v1() + path.extname(file.originalname))
        }
    });
    // 初始化multer并指定存储位置
    // 返回中间件
    return multer({storage: storage});
}

module.exports = {
    createUpload,
    parseFilePath(url){
        return 'http://' + host + ":" + port + url.replace(/^public/, '');
    }
}